﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.OleDb;

public partial class UserControl_ControlImportStockDKSH : System.Web.UI.UserControl
{
    string strconn = webapp4U.Configuration.CurrentConnectionString;
    string error = "";
    ClassExecute.ClassExecute dt;
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    void ShowMessageBox(string text)
    {
        MessageBox.Text = text;
        MessageBox.ShowOnPageLoad = true;
    }
    string MakeRandom()
    {


        string date = "StockDKSH_" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();

        return date;

    }
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        dt = new ClassExecute.ClassExecute();

        try
        {

            //check file browsed or not
            if (!fuUpload.HasFile)
            {
                ShowMessageBox("Bạn chưa chọn file để up load");
                return;
            }
            else if (!checkTypeFile())
            {
                ShowMessageBox("Không đúng định dạng file excel");
                return;
            }
            else if (txtDate.Text == "")
            {
                ShowMessageBox("Bạn chưa chọn ngày để cập nhật");
                return;
            }
            else if (checKExists(txtDate.Text) == 1)
            {

                if (ViewState["FileName"] != null)
                {
                    ViewState["FileName"] = "";
                }
                ViewState["FileName"] = fuUpload.FileName;

                //lấy YyyyMm từ date
                string YyyyMm = txtDate.Text.Substring(6, 4) + txtDate.Text.Substring(3, 2);

                //step 1.1 kiểm tra thư mục đã có chưa,nếu không có thì tạo
                string pathFolder = webapp4U.Globals.PhysicalApplicationPath() + @"UserUpload/ImportedFileExcel/StockOnHand" + YyyyMm;
                DirectoryInfo dInfo = new DirectoryInfo(pathFolder);
                if (!dInfo.Exists)
                {
                    dInfo.Create();
                }



                //step 1.2 đưa file vào server
                fuUpload.SaveAs(webapp4U.Globals.PhysicalApplicationPath() + @"UserUpload/ImportedFileExcel/StockOnHand" + YyyyMm + "/" + ViewState["FileName"].ToString());
                
                //Đổi tên file
                string fileNameDestination = MakeRandom() + "_" + ViewState["FileName"].ToString();
                ViewState["FileNameDes"] = fileNameDestination;

                string FIlePathPri = pathFolder + @"/" + ViewState["FileName"].ToString();
                string filePathDes = pathFolder + @"/" + fileNameDestination;
                //1.3 và lưu lại với tên mới
                File.Move(FIlePathPri, filePathDes);

                //đưa dữ liệu vào table tạm
                Excel2Sql(filePathDes, fileNameDestination);


            }
            else if (checKExists(txtDate.Text) == 2)
            {
                ShowMessageBox("Bạn đã cập nhật tồn cuối cho ngày " + txtDate.Text +",nếu muốn cập nhật lại,trước tiên đề nghị bạn xóa file đã cập nhật ngày này và sau đó import lại");
                return;
            }
            else if (checKExists(txtDate.Text) == 3)
            {
                ShowMessageBox("Không có nghiệp vụ bán hàng phát sinh trong thời gian này");
                return;
            }
        }
        catch (Exception ex)
        {
            string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
            dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);
        }
    }
    protected void btnOk_Click(object sender, EventArgs e)
    {
        //Vượt qua step 1,đi tới step 2 để kiểm tra nội dung file name  
        MessageBoxFileDuplicate.ShowOnPageLoad = false;

       

    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        //Cancel luôn
        File.Delete(webapp4U.Globals.PhysicalApplicationPath() + @"/UserUpload/UploadTempFileExcel/" + ViewState["FileName"].ToString());
        MessageBoxFileDuplicate.ShowOnPageLoad = false;
    }
    protected void btnImport_Click(object sender, EventArgs e)
    {
        dt = new ClassExecute.ClassExecute();
        try
        {
            if ((ViewState["FileName"] == null) || ViewState["FileName"].ToString() == "")
            {
                ShowMessageBox("Bạn chưa thực hiện upload file vào hệ thống");
            }
            else
            {
                bool kq = dt.ExecuteSQl_bool(strconn, CommandType.StoredProcedure, "k_UpdateStockDKSH", ref error,
                   new SqlParameter("@UserName", Session["user"].ToString()),
                   new SqlParameter("@WorkingDate", txtDate.Text),
                   new SqlParameter("@FileNameOrg", ViewState["FileName"].ToString()),
                   new SqlParameter("@FileNameDes", ViewState["FileNameDes"].ToString()));
                if (kq)
                {
                    ViewState["FileNameDes"] = null;
                    ViewState["FileName"] = null;
                    ShowMessageBox("Bạn đã import thành công dữ liệu Stock On Hand của DKSH");
                }
                else
                {
                    ShowMessageBox("Hệ thống đang bảo trì");
                }
                
            }

        }
        catch 
        {
           
            return;
        }
    }
    int checKExists(string Workingdate)
    {
        dt = new ClassExecute.ClassExecute();
        int i = dt.ExecuteSQl_int(strconn, "k_checkExistsStockDate", CommandType.StoredProcedure, ref error,
            new SqlParameter("@WorkingDate",Workingdate));
        return i;
    }
    void Excel2Sql(string path, string fileName)
    {
        dt = new ClassExecute.ClassExecute();
        OleDbConnection oconn = null;
        try
        {
            bool kq = dt.ExecuteSQl_bool(strconn, CommandType.StoredProcedure, "[k_TempStockImportDKSH_Delete]", ref error,
                new SqlParameter("@UserName", Session["user"].ToString()));

            oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                path + ";Extended Properties=Excel 12.0;Persist Security Info=False;");


            string sql = "select Asof,Type,Matnr,Product,Syslot,Batch,ExpiryDate,BaseUOM,HN1,HN2,DN,VSIP,Other,HCM,Total";
            sql = sql + ",'FM_00000003' as SiteCode,'" + fileName + "' as FileName,'" + Session["user"].ToString() + "' as UserImport,'" + txtDate.Text + "' as DateUpdate from [zStockonhand$]";

            OleDbCommand ocmd = new OleDbCommand(sql, oconn);
            oconn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter(ocmd);
            DataTable dbTest = new DataTable();
            da.Fill(dbTest);
            oconn.Close();

            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strconn))
            {

                bulkCopy.BatchSize = 500;
                bulkCopy.NotifyAfter = 1000;

                bulkCopy.DestinationTableName = "dbo.TempImportStockDKSH" + Session["user"].ToString();
                bulkCopy.WriteToServer(dbTest);

            }

            ShowMessageBox("Bạn đã upload file thành công,đề nghị bạn nhấn nút import để cập nhật vào hệ thống");
        }
        catch (DataException ex)
        {

            string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
            dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);

        }
        finally
        {
            // Clean up.
            if (oconn != null)
            {
                oconn.Close();
                oconn.Dispose();
            }
        }


    }
    bool checkTypeFile()
    {
        string[] validFileTypes = { "xlsx", "xls" };
        string ext = System.IO.Path.GetExtension(fuUpload.PostedFile.FileName);
        bool isValidFile = false;
        for (int i = 0; i < validFileTypes.Length; i++)
        {
            if (ext == "." + validFileTypes[i])
            {
                isValidFile = true;
                break;
            }
        }
        if (!isValidFile)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}